import java.text.DecimalFormat;

public class NumberUtil {
    // 静态属性
    public static final double PI = 3.14159;
    public static final double E = 2.71828;

    // 静态方法

    /**
     * 将数字保留到指定的小数点位数，返回格式化后的字符串。
     * @param value 要格式化的数字
     * @param precision 小数点位数
     * @return 格式化后的字符串
     */
    public static String format(double value, int precision) {
        StringBuilder pattern = new StringBuilder("0.");
        for (int i = 0; i < precision; i++) {
            pattern.append("0");
        }
        DecimalFormat decimalFormat = new DecimalFormat(pattern.toString());
        return decimalFormat.format(value);
    }

    /**
     * 四舍五入数字到指定的小数点位数。
     * @param value 要四舍五入的数字
     * @param precision 小数点位数
     * @return 四舍五入后的数字
     */
    public static double round(double value, int precision) {
        double scale = Math.pow(10, precision);
        return Math.round(value * scale) / scale;
    }

    /**
     * 计算newValue相对于oldValue的百分比变化，并返回格式化后的字符串。
     * @param oldValue 旧值
     * @param newValue 新值
     * @return 百分比变化的字符串
     */
    public static String percentChange(double oldValue, double newValue) {
        double change = (newValue - oldValue) / oldValue * 100;
        return format(change, 2) + "%";
    }

    /**
     * 判断一个数是否为素数。
     * @param num 要判断的数
     * @return 如果是素数，则返回true；否则返回false
     */
    public static boolean isPrime(int num) {
        if (num < 2) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

    // 私有构造方法
    private NumberUtil() {
        System.out.println("Initializing NumberUtil...");
    }

    // 静态代码块
    static {
        System.out.println("Initializing constants...");
    }
}
